Solving Programming Problems and Challenges Step-by-Step